from django import forms
from django.forms import ModelForm
from models import *

class QuestaoSubjetivaFormulairo(ModelForm):
    class Meta:
        model = QuestaoSubjetiva
        fields = ['enunciado','resposta','nivel','tags']

class SearchForm(forms.Form):
    OPERADOR_IGUAL = '1'
    OPERADOR_DIFERENTE = '2'
    OPERADOR_MAIOR = '3'
    OPERADOR_MENOR = '4'
    OPERADOR_CONTEM = '5'
    OPERADOR_CHOICES = (
            (OPERADOR_IGUAL, 'Igual'),
            (OPERADOR_DIFERENTE, 'Diferente'),
            (OPERADOR_MAIOR, 'Maior'),
            (OPERADOR_MENOR, 'Menor'),
            (OPERADOR_CONTEM, u'Contém'),
    )
    
    campo = forms.ChoiceField(choices=(('tags','tags'), (u'nível','nivel')))
    operador = forms.ChoiceField(choices=OPERADOR_CHOICES)
    valor = forms.CharField(max_length=30, help_text='\'*\' para retornar todos')
    
    def __init__(self, query_set, *args, **kwargs):
        self.query_set = query_set
        super(SearchForm, self).__init__(*args, **kwargs)
        self.fields['campo'].choices = self.attrs()
    
#    def attrs(self):
#        attrs = self.query_set.model._meta.fields
#        for attr in attrs:
#            if attr.name == 'user':
#                yield 'user__first_name','Nome'
#                yield 'user__username','Cpf'
#            elif attr.name != 'id' and (not attr.name.endswith('_id')) and (not attr.name.endswith('_type')):
#                yield attr.name, attr.name
    
    def submit_query(self):
        kwargs = {}
        campo = self.cleaned_data['campo']
        if self.cleaned_data['valor'] == '*':
            return self.query_set
        if self.cleaned_data['operador'] == self.OPERADOR_DIFERENTE:
            kwargs[campo] = self.cleaned_data['valor']
            return self.query_set.exclude(**kwargs)
        elif self.cleaned_data['operador'] == self.OPERADOR_MAIOR:
            campo = u"%s__gt" % campo
        elif self.cleaned_data['operador'] == self.OPERADOR_MENOR:
            campo = u"%s__lt" % campo
        elif self.cleaned_data['operador'] == self.OPERADOR_CONTEM:
            campo = u"%s__contains" % campo
        
        kwargs[campo] = unicode(self.cleaned_data['valor'])
        return self.query_set.filter(**kwargs)
    
#class MultiplaEscolha(Questao):
#    class Meta:
#        model = MultiplaEscolha
#        
#class VerdadeiroFalso(Questao):
#    class Meta:
#        model = VerdadeiroFalso